home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
timedat.exe
/
TIMESPAN.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
6KB
|
321 lines
/*
Copyright 1992 - John K. Humkey
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <dos.h>
#include "timespan.h"
void astro_to_date(int *year, int *month, int *day, long *ast);
void date_to_astro(int *year, int *month, int *day, long *ast);
void time_to_astro(int *hour, int *mins, int *sec, int *millisec, long *ast);
void astro_to_time(int *hour, int *mins, int *sec, int *millisec, long *ast);
//
// TIMESPAN::OPERATOR +
//
//
timespan operator + ( timespan &tdone, timespan &tdtwo )
{
timespan temptd;
long dx,tx;
tx = tdone.msecval + tdtwo.msecval;
dx = tdone.daysval + tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
temptd.setdt(dx,tx);
return temptd;
}
//
// TIMESPAN::OPERATOR -
//
//
timespan operator - ( timespan &tdone, timespan &tdtwo )
{
timespan temptd,tanother;
long dx,tx;
if ( (tdone.daysval < tdtwo.daysval) ||
((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))) {
temptd.setdt(0L,0L);
}
else {
if (tdone.msecval < tdtwo.msecval) {
tanother.daysval = tdone.daysval - 1;
tanother.msecval = tdone.msecval + (24L * 60L * 60L * 1000);
}
else {
tanother = tdone;
}
tx = tanother.msecval - tdtwo.msecval;
dx = tanother.daysval - tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
temptd.setdt(dx,tx);
}
return temptd;
}
//
// TIMESPAN::OPERATOR *
//
//
timespan operator * ( timespan &tdone, int multval )
{
timespan temptd;
long dx,tx;
tx = tdone.msecval * (long)multval;
dx = tdone.daysval * (long)multval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
temptd.setdt(dx,tx);
return temptd;
}
//
// TIMESPAN::OPERATOR /
//
//
timespan operator / ( timespan &tdone, int divideval )
{
timespan temptd;
long dx,tx;
if (divideval==0) return tdone;
tx = tdone.msecval / (long)divideval;
dx = tdone.daysval / (long)divideval;
tx += (tdone.daysval % (long)divideval) * (24L * 60L * 60L * 1000L);
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
temptd.setdt(dx,tx);
return temptd;
}
//
// TIMESPAN::OPERATOR +=
//
//
timespan operator += ( timespan &tdone, timespan &tdtwo )
{
timespan temptd;
long dx,tx;
tx = tdone.msecval + tdtwo.msecval;
dx = tdone.daysval + tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
tdone.setdt(dx,tx);
return tdone;
}
//
// TIMESPAN::OPERATOR -=
//
//
timespan operator -= ( timespan &tdone, timespan &tdtwo )
{
timespan temptd,tanother;
long dx,tx;
if ( (tdone.daysval < tdtwo.daysval) ||
((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))) {
tdone.setdt(0L,0L);
}
else {
if (tdone.msecval < tdtwo.msecval) {
tanother.daysval = tdone.daysval - 1;
tanother.msecval = tdone.msecval + (24L * 60L * 60L * 1000);
}
else {
tanother = tdone;
}
tx = tanother.msecval - tdtwo.msecval;
dx = tanother.daysval - tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
tdone.setdt(dx,tx);
}
return tdone;
}
//
// TIMESPAN::OPERATOR *=
//
//
timespan operator *= ( timespan &tdone, int multval )
{
timespan temptd;
long dx,tx;
tx = tdone.msecval * (long)multval;
dx = tdone.daysval * (long)multval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
tdone.setdt(dx,tx);
return tdone;
}
//
// TIMESPAN::OPERATOR /=
//
//
timespan operator /= ( timespan &tdone, int divideval )
{
timespan temptd;
long dx,tx;
if (divideval==0) return tdone;
tx = tdone.msecval / (long)divideval;
dx = tdone.daysval / (long)divideval;
tx += (tdone.daysval % (long)divideval) * (24L * 60L * 60L * 1000L);
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
tdone.setdt(dx,tx);
return tdone;
}
//
// TIMESPAN::OPERATOR <
//
//
int operator < ( timespan &tdone, timespan &tdtwo )
{
if ( (tdone.daysval < tdtwo.daysval) ||
((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval)))
return 1;
else
return 0;
}
//
// TIMESPAN::OPERATOR >
//
//
int operator > ( timespan &tdone, timespan &tdtwo )
{
if ( (tdone.daysval > tdtwo.daysval) ||
((tdone.daysval == tdtwo.daysval) && (tdone.msecval > tdtwo.msecval)))
return 1;
else
return 0;
}
//
// TIMESPAN::OPERATOR ==
//
//
int operator == ( timespan &tdone, timespan &tdtwo )
{
if ( (tdone.daysval == tdtwo.daysval) &&
(tdone.msecval == tdtwo.msecval) )
return 1;
else
return 0;
}
//
// TIMESPAN::OPERATOR !=
//
//
int operator != ( timespan &tdone, timespan &tdtwo )
{
if ( (tdone.daysval != tdtwo.daysval) ||
(tdone.msecval != tdtwo.msecval) )
return 1;
else
return 0;
}
//
// TIMESPAN::OPERATOR <=
//
//
int operator <= ( timespan &tdone, timespan &tdtwo )
{
if (((tdone.daysval == tdtwo.daysval) &&
(tdone.msecval == tdtwo.msecval) ) ||
((tdone.daysval < tdtwo.daysval) ||
((tdone.daysval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))))
return 1;
else
return 0;
}
//
// TIMESPAN::OPERATOR >=
//
//
int operator >= ( timespan &tdone, timespan &tdtwo )
{
if (((tdone.daysval == tdtwo.daysval) &&
(tdone.msecval == tdtwo.msecval) ) ||
((tdone.daysval > tdtwo.daysval) ||
((tdone.daysval == tdtwo.daysval) && (tdone.msecval > tdtwo.msecval))))
return 1;
else
return 0;
}
//
// TIMESPAN::TIMESPAN
//
//
timespan::timespan(long numdays,
int hour, int minute, int second, int millisecond)
{
daysval = numdays;
time_to_astro(&hour,&minute,&second,&millisecond,&msecval);
}
//
// TIMESPAN::~TIMESPAN
//
// Destructor, waits for keypress on screen, closes files for other modes.
//
timespan::~timespan()
{
}
//
// TIMESPAN::PRINT
//
// Prints internal values of a timespan variable.
//
void timespan::print()
{
int year, month, day, hour, mins, sec, millisec;
astro_to_time(&hour,&mins,&sec,&millisec,&msecval);
printf("%08ld %02d:%02d:%02d.%d\n", daysval,hour,mins,sec,millisec);
}
//
// TIMESPAN::SETDT
//
// Sets internal values of a timespan variable.
//
void timespan::setdt(long dx, long tx)
{
daysval = dx;
msecval = tx;
}